#ifndef __MSG_H
#define __MSG_H

#include "stdio.h"
#include "stdint.h"
#include "stdbool.h"
#include "string.h"

// FE len type num data..... ckH  ckL


#define UPDATA_MSG_IDEL        0
#define UPDATA_MSG_HEAD        1   // 0xFE
#define UPDATA_MSG_MSGTYPE     2   // 消息类型
#define UPDATA_MSG_LEN         3		// MSG_PAYLOAD的字节数
#define UPDATA_MSG_PAYLOAD     4		// 消息内容
#define UPDATA_MSG_CKH         5
#define UPDATA_MSG_CKL         6

#define UPDATA_HEAD            0xFE
#define BUFF_LEN 							 210   // 缓存区长度



typedef struct{
	uint8_t head;								// 消息头
	uint16_t len;								// 消息长度
	/*type具体参数
		0x00：心跳包
		0x01：消息应答
				payload：1个字节，1成功，0：失败
		0x02：准备发送固件包
				Payload：4个字节，第1/2字节表示数据包长度（高位在前低位在后）
											第3/4字节表示固件版本信息（高位在前低位在后）
		0x03：固件包
				Payload：bin文件内容，最大255字节
		0x04：固件更新结束
		0x05：开始系统备份
		0x06：系统备份完成
		0x07：版本信息请求
		0x08：版本信息发送
				Payload：2字节，第1/2字节表示固件版本信息（高位在前低位在后）
		0x09：更新前准备就绪
	*/
	uint8_t type;								// 消息类型 
	uint16_t	num;							// 消息帧序号
	uint8_t buff[BUFF_LEN];			// 消息缓存区
	uint8_t ckH;  							// 高8位校验位
	uint8_t ckL;								// 低8位校验位
	
	uint8_t stat;               // 解析状态：0：失败   1：成功	
}MSG_t;





extern MSG_t msg;


uint8_t msgParse(uint8_t data,MSG_t *msg);
void binRequest(uint16_t index);
void versionRequest(void);
void updateEnd(uint32_t v);


#endif


